package com.nstar.base.util
{
	import com.adobe.ac.mxeffects.CubeRotate;
	import com.adobe.ac.mxeffects.DistortionConstants;
	
	import mx.containers.ViewStack;
	
	public class DistortionUtils
	{
		public function DistortionUtils()
		{
		}
		
		//旋转视图
		public static function rotateView(direction:String,
			target:Object,siblings:Array,duration:int=1000):void{
			var rotate:CubeRotate = new CubeRotate();
			rotate.direction = direction;
			rotate.target = target;
			rotate.siblings = siblings;
			rotate.duration = duration;
			rotate.play();
		}
		
		//旋转ViewStack中的视图
		//使用ButtonBar绑定ViewStack时，一个按钮对应一个视图，此时不需要指定第二个参数
		//如果使用上、下页两个按钮来按钮视图切换的换的话，需要明确指定一下旋转方向
		//原理：使用ViewStack来保存旧的视图的索引，以作比较，这样就能知道应该旋转的方向
		/**
		 *  //使用两个按钮切换视图时的示例代码
		 * 	//下一页
		 *	private function rotateLeftHandler(event:MouseEvent):void{
		 *		DistortionEffectsUtils.rotateViewStack(vsMain,DistortionConstants.LEFT);
		 *	}
		 * 	//上一页
		 *	private function rotateRightHandler(event:MouseEvent):void{    
		 *		DistortionEffectsUtils.rotateViewStack(vsMain,DistortionConstants.RIGHT);
		 *	}
		 *	//使用ButtonBar切换视图的代码，处理ItemClickEvent事件
		 *	function itemclickHandler(event:ItemClickEvent):void{
		 *		DistortionEffectsUtils.rotateViewStack(vsMain);
		 *	}
		 */ 
		public static function rotateViewStack(vs:ViewStack,
			direction:String=null,duration:int=1000):void{
			var oldIndex:int ;
			//获取原来的索引信息
			if (vs.data == null){
				oldIndex = 0;
			}else{
				oldIndex = int(vs.data);
			}
			
			//指定了方向时的处理，在处于最大索引后最小索引时都不使用效果
			if (direction!=null){
				switch (direction){
					case DistortionConstants.LEFT:
						//达到最大索引后不再使用效果
						if (vs.selectedIndex==(vs.getChildren().length-1)){
							return;	
						}
						vs.selectedIndex++;
						break;
					case DistortionConstants.RIGHT:
						//到达第一页时不再使用效果
						if (vs.selectedIndex == 0){
							return;
						}
						vs.selectedIndex--;
						break;	
				}
				
			}

			//如果索引相等就不使用效果
			if ((oldIndex == vs.selectedIndex) &&
			    (direction == null)){
			    	return;
			} 
			
			//保存原来的索引
			vs.data = vs.selectedIndex;
			
			var rotate:CubeRotate = new CubeRotate();
			//根据新旧索引值判断应该旋转的方向
			if (vs.selectedIndex > oldIndex ){
				rotate.direction = DistortionConstants.LEFT;
			}else{
				rotate.direction = DistortionConstants.RIGHT;
			}
			//设置旋转目标对象
			rotate.target = vs.getChildAt(oldIndex);
			rotate.siblings = [vs.getChildAt(vs.selectedIndex)];
			//播放效果
			rotate.play();
			
		}		

	}
}